package com.atguigu.ssyx.acl.helper;

import com.atguigu.ssyx.common.result.Result;
import com.atguigu.ssyx.model.acl.Permission;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 杨林
 * @create 2023-07-10 10:54 星期一
 * description:权限数据构建树型结构工具类
 */
public class PermissionHelper {

    public static List<Permission> build(List<Permission> allPermission){
        //创建返回结果的集合
        List<Permission> result = new ArrayList<>();
        //遍历所有菜单数据
        for (Permission permission : allPermission) {
            //找出第一层数据
            if (permission.getPid() == 0){  //代表当前节点为第一层数据
                //设置等级
                permission.setLevel(1);
                //调用方法，从第一层开始往下找该节点的子节点，封装数据，直到当前节点没有子节点为止
                result.add(findChildren(permission,allPermission));
            }
        }
        return result;
    }

    /**
     * 递归往下找，找子节点
     * @param permission：代表上层节点，从这里往下找
     * @param allPermission：所有菜单
     * @return
     */
    private static Permission findChildren(Permission permission, List<Permission> allPermission) {
        //初始化permission的children数据
        permission.setChildren(new ArrayList<>());
        //遍历所有数据
        for (Permission item : allPermission) {
            //如果遍历的当前节点的pid与permission的id相等，说明：遍历的当前节点是permission的子节点
            if (item.getPid() == permission.getId()){
                item.setLevel(permission.getLevel() + 1);

                //封装下一层数据
                permission.getChildren().add(findChildren(item,allPermission));
            }
        }

        return permission;
    }
}
